package map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Map的遍历，支持三种遍历方式：
 * 1.遍历所有的key
 * 2.遍历所有键值对
 * 3.遍历所有的value（相对不常用）
 */
public class MapDemo2 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();// 创建一个HashMap实例，用于存储科目和成绩的键值对
        map.put("语文",99);
        map.put("数学",100);
        map.put("英语",88);
        map.put("物理",96);
        map.put("化学",99);
        System.out.println(map);

        Set<String> keySet = map.keySet(); // 获取map中的所有key（科目名称）
        for (String key:keySet){// // 遍历所有的key，并打印出来
            System.out.println("key:"+key);
        }
        Collection<Integer> values = map.values();
        for (Integer value:values){
            System.out.println("value:"+value);
        }
        /**
         * 遍历所有的键值对
         * Set<Map.Entry> entrySet()
         * 当前的map是HashMap，所以返回的Set集合中的元素类型是HashMap.Entry，而HashMap.Entry是Map接口的内部接口，
         */
        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
        for (Map.Entry<String,Integer> entry:entrySet){
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println("key:"+key+",value:"+value);
        }

        /**
         * jdk8以后，Map接口新增了forEach方法，基于lambda可以遍历所有的键值对
         */
        keySet.forEach(System.out::println);
        values.forEach(System.out::println);
        entrySet.forEach(System.out::println);
        map.forEach((k,v)-> System.out.println(k+","+v));//Map的forEach方法



    }
}
